 // Integrantes: Lopez Jesus C.I 19198862
//          Contreras Johana C.I 18656815
//           Guardia Ivan C.I 19104924
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.Comparator;
import java.util.ListIterator;

public class Principal {

    BufferedReader lector;
    Seccion s = new Seccion();
    Alumno a;
    String apellido;
    String nombre;
    String cedula;
    String titulo;
    Profesor p = new Profesor(apellido, nombre, cedula, titulo);
    boolean seaplico = false;

    Principal() {
        lector = new BufferedReader(new InputStreamReader(System.in));
        //s  = new  Seccion();


    }

    /**
     * @param args
     * @throws IOException 
     */
    /**
     * @param args
     */
    public static void main(String[] args) throws IOException {
        Principal p = new Principal();
        p.Menu();
    }

    private void Menu() throws IOException {

        String tipo;
        String opcion = "S";
        do {
            System.out.println("--------------------------------");
            System.out.println("Elija una de las siguientes opciones ");
            System.out.println("Presione cualquier otra tecla para salir:");
            System.out.println("\t1) Asignar Numero de Seccion ");
            System.out.println("\t2) Asignar Profesor ");
            System.out.println("\t3) Inscribir Alumno ");
            System.out.println("\t4) Retirar Alumno ");
            System.out.println("\t5) Buscar un Alumno por cedula ");
            System.out.println("\t6) Aplicar las Evaluaciones ");
            System.out.println("\t7) Listar Estudiantes Ordenados por Cedula ");
            System.out.println("\t8) Listar Estudiantes Ordenados por Nota Final");
            System.out.println("\t9) Listar Estudiantes Aprobdos ");
            System.out.println("\t10) Listar Estudiantes Aplazados ");
            System.out.println("\t11) Promedio de Notas: ");
            System.out.println("\t                                 ");

            // Lectura de dato de entrada

            tipo = lector.readLine();


            if (tipo.equals("1")) {
                RegistrarSeccion();
            } else if (tipo.equals("2")) {
                AsignarProfesor();
            } else if (tipo.equals("3")) {
                InscribirAlumno();
            } else if (tipo.equals("4")) {
                RetirarAlumno();
            } else if (tipo.equals("5")) {
                BuscarAlumno();
            } else if (tipo.equals("6")) {
                AplicarEvaluaciones();
            } else if (tipo.equals("7")) {
                OrdenarCedula();
            } else if (tipo.equals("8")) {
                Ordenarpornota();
            } else if (tipo.equals("9")) {
                ListaAprobados();
            } else if (tipo.equals("10")) {
                ListaReprobados();
            } else if (tipo.equals("11")) {
                PromedioNotas();
            } else {
                System.out.println("\tOpcion Invalida, presione una de las opciones de la pantalla ");
            }
            System.out.print("\tDesea Realizar otra Operacion S/N: ");
            opcion = lector.readLine();
        } while (opcion.equalsIgnoreCase("S"));
        if (opcion != "S") {
            System.out.println("\tPrograma Finalizado");
        }
    }

    private void RegistrarSeccion() throws IOException {

        System.out.print("\tTipee el Nro de la Seccion: ");
        int nro_seccion = Integer.parseInt(lector.readLine());
        s.setNro_seccion(nro_seccion);
    }

    private void AsignarProfesor() throws IOException {
        if (s.getNro_seccion() == 0) {
            System.out.print("\tAsigne primero numero a la seccion: ");
        } else {
            System.out.print("\tTipee la cedula del profesor: ");
            String cedula = (lector.readLine());
            System.out.print("\tTipee el nombre del profesor: ");
            String nombre = (lector.readLine());
            System.out.print("\tTipee el apellido del profesor: ");
            String apellido = (lector.readLine());
            System.out.print("\tTipee el titulo obtenido del profesor: ");
            String titulo = (lector.readLine());
            Profesor p = new Profesor(apellido, nombre, cedula, titulo);
            s.AsignarProfesor(p);
            System.out.println("\t                                 ");
            System.out.println("\tEl Profesor:" + p.getApellido() + " " + p.getNombre() + "\tfue asignado a la seccion: " + s.getNro_seccion());
        }
    }

    private void InscribirAlumno() throws IOException {
        if (s.getNro_seccion() == 0) {
            System.out.print("\tAsigne primero numero a la seccion: ");
        } else {
            System.out.print("\tTipee la cedula del alumno: ");
            String cedula = (lector.readLine());

            if (s.BuscarAlumno(cedula) == null) {
                System.out.print("\tTipee el nombre del alumno: ");
                String nombre = (lector.readLine());
                System.out.print("\tTipee el apellido del alumno: ");
                String apellido = (lector.readLine());
                Alumno a = new Alumno(apellido, nombre, cedula);
                s.InscribirAlumno(a);
                System.out.println("\t                                 ");
            } else {
                System.out.println("\tEl Alumno ya esta inscrito en esta seccion ");
            }
        }
    }

    private void AplicarEvaluaciones() {
        //boolean rsp=false;
        if (s.Vacia() == true || s.getProfesor() == null) {
            System.out.println("\tNo hay estudiantes inscritos o profesor inscrito");
            seaplico = false;
            //return rsp;
        } else {
            s.AplicarEvaluaciones();
            System.out.println("\tSe aplico la evaluacion exitosamente");
            //return rsp=true;
            seaplico = true;
        }
    }

    private void RetirarAlumno() throws IOException {

        if (s.Vacia() == true) {
            System.out.println("\tNo hay estudiantes inscritos ");
        } else {
            System.out.print("\tTipee la cedula del alumno: ");
            String cedula = (lector.readLine());
            s.RetirarAlumno(cedula);
            System.out.print("\tSe ha retirado el alumno exitosamente");
        }
    }

    private void BuscarAlumno() throws IOException {
        System.out.print("\tTipee la cedula del alumno: ");
        String cedula = (lector.readLine());
        a = s.BuscarAlumno(cedula);
        if (s.BuscarAlumno(cedula) == null) {
            System.out.print("\tEl alumno no se encontro ");
        } else {
            System.out.println("\t El nombre del alumno es:" + a.getNombre());
            System.out.println("\t El apellido del alumno es:" + a.getApellido());
        }
    }

    private void OrdenarCedula() throws IOException {
        Alumno a;
        Profesor p;
        if (s.Vacia() == true) {
            System.out.println("\tNo hay Alumnos inscritos ");
        } else {
            System.out.print("\t        Alumnos Ordenados por Nro de Cedula de Identidad");
            System.out.println("\t                                 ");
            System.out.println("\t                                 ");
            System.out.println("\t               Numero de la Seccion:" + s.getNro_seccion());
            System.out.println("\t      ");

            System.out.println("\t    Cedula           Apellido         Nombre        Nota Final ");
            Collections.sort(s.getAlumnos(), new Ordenarporcedula());
            ListIterator<Alumno> it = s.getAlumnos().listIterator();
            while (it.hasNext()) {
                a = it.next();
                System.out.print("\t      " + a.getCedula());
                System.out.print("\t      " + a.getApellido());
                System.out.print("\t      " + a.getNombre());
                System.out.println("\t      " + a.getNota_Final());

            }
            System.out.println("\tNumero de Alumnos inscrito en la Seccion son: " + s.Nro_Alumno());
        }
        File TextFile = new File("/home/ivancho/workspace/Proyecto/listadecedula.txt");
        s.Imprimirtxt(s.getAlumnos(), TextFile);
    }

    private void Ordenarpornota() throws IOException {
        Alumno a;
        Profesor p;

        //if (AplicarEvaluaciones()==false)
        if (seaplico == false) {
            System.out.println("\tDebe aplicar Evaluacion ");
        } else {
            System.out.print("\t        Alumnos Ordenados por Nota Final");
            System.out.println("\t                                 ");
            System.out.println("\t        Numero de la Seccion:" + s.getNro_seccion());
            System.out.println("\t      ");

            System.out.println("\tNota Final          Cedula          Apellido          Nombre     ");
            Collections.sort(s.getAlumnos(), new Ordenarpornota());
            ListIterator<Alumno> it = s.getAlumnos().listIterator();
            while (it.hasNext()) {

                a = it.next();
                System.out.print("\t      " + a.getNota_Final());
                System.out.print("\t      " + a.getCedula());
                System.out.print("\t      " + a.getApellido());
                System.out.println("\t        " + a.getNombre());

            }
            System.out.println("\tNumero de Alumnos inscrito en la Seccion son: " + s.Nro_Alumno());
        }
        File TextFile = new File("/home/ivancho/workspace/Proyecto/listadenotas.txt");
        s.Imprimirtxt(s.getAlumnos(), TextFile);
    }

    private void ListaAprobados() throws IOException {
        if (seaplico == false) {
            System.out.println("\tDebe aplicar Evaluacion ");
        } else {
            System.out.print("\t        Los alumnos aprobados son:");
            System.out.println("\t                                 ");
            System.out.println("\t        Numero de la Seccion:" + s.getNro_seccion());
            System.out.println("\t      ");
            System.out.println("\tNota Final          Cedula          Apellido          Nombre ");

            ListIterator<Alumno> it = s.ListaAprobados().listIterator();
            while (it.hasNext()) {

                a = it.next();
                System.out.print("\t      " + a.getNota_Final());
                System.out.print("\t      " + a.getCedula());
                System.out.print("\t      " + a.getApellido());
                System.out.println("\t      " + a.getNombre());

            }
            System.out.println("\tNumero de Alumnos inscrito en la Seccion son: " + s.Nro_Alumno());
        }
        File TextFile = new File("/home/ivancho/workspace/Proyecto/listadeaprobados.txt");
        s.Imprimirtxt(s.ListaAprobados(), TextFile);

    }

    private void ListaReprobados() throws IOException {
        if (seaplico == false) {
            System.out.println("\tDebe aplicar Evaluacion ");
        } //if (AplicarEvaluaciones()==false)
        //System.out.print("\tDebe aplicar una evaluacion ");
        else {
            System.out.print("\t        Los alumnos Reprobados son:");
            System.out.println("\t                                 ");
            System.out.println("\t          Numero de la Seccion:" + s.getNro_seccion());
            System.out.println("\t      ");
            System.out.println("\tNota Final          Cedula          Apellido          Nombre ");
            ListIterator<Alumno> it = s.ListaReprobados().listIterator();
            while (it.hasNext()) {

                a = it.next();
                System.out.print("\t      " + a.getNota_Final());
                System.out.print("\t      " + a.getCedula());
                System.out.print("\t      " + a.getApellido());
                System.out.println("\t      " + a.getNombre());

            }
            System.out.println("\tNumero de Alumnos inscrito en la Seccion son: " + s.Nro_Alumno());
        }
        File TextFile = new File("/home/ivancho/workspace/Proyecto/listadereprobados.txt");
        s.Imprimirtxt(s.ListaReprobados(), TextFile);
    }

    private void PromedioNotas() {
        if (seaplico == false) {
            System.out.println("\tDebe aplicar Evaluacion ");
        } else {
            System.out.println("\tEl promedio de notas es:" + s.PromedioNotas());
        }

    }
}
